import random

#基本上思路就是先做算术的确定，再确定数字最后输出
#一年级的简单难度：10以内的加法，中等难度：20以内的加减法，困难难度：凑10练习
class Gradeone():
    # pro_har:1表示简单，2表示中等，3表示困难
    # type1表示填空题,2表示选择题,3表示判断题
    def __init__(self,pro_har:int,type:int):
        self.pro_har = pro_har
        self.score = 0
        self.type = type
        self.symbol= 0 #存放符号，1表示加法,2表示减法
        self.num1 = 0 #存放数字
        self.num2 = 0
    
    def symbolgeneration(self):
        if self.pro_har == 2:
            self.symbol = random.randint(1,2)
        else:
            self.symbol = 1

    # 尽量保证a比b大
    def numbergeneration(self):
        if self.pro_har == 1:
            a = random.randint(1,9)   
            b = random.randint(1,9)
        elif self.pro_har == 2:
            a = random.randint(1,19)
            b = random.randint(1,19)
            if self.symbol == 2:
                if a < b:
                    z = 0
                    z = a
                    a = b
                    b = z
        else:
            a = random.randint(1,9)
            b = 10
        self.num1 = a
        self.num2 = b

    def checking(self):
        if not self.pro_har == 3:
            if self.symbol == 1:
                rightans = self.num1 + self.num2
                ans = input(str(self.num1)+"+"+str(self.num2)+"=")
                # 一个小bug,当输入的不是数字的时候会停止
                ans = int(ans)
                if ans == rightans:
                    print("很棒，你做对了这道题")
                    self.score += 3.33
                else:
                    print("噢哦，再接再厉")
            else:
                rightans = self.num1 - self.num2
                ans = input(str(self.num1)+"-"+str(self.num2)+"=")
                ans = int(ans) #一个小bug,当输入的不是数字的时候会停止
                if ans == rightans:
                    print("很棒，你做对了这道题")
                    self.score += 3.33
                else:
                    print("噢哦，再接再厉")
            return None
        else:
            rightans = 10-self.num1
            ans = input("( )"+"+"+str(self.num1)+"="+"10"+"   ()=")
            ans = int(ans)
            if ans == rightans:
                print("很棒，你做对了这道题")
                self.score += 3.33
            else:
                print("噢哦，再接再厉")
        return None

    #测试的主函数，来测试该模块内的功能是否正确
    def mainfunc(self):
        print("每天30题的口算练习哦")
        get = input("如果准备好了就输入yes开始吧\n")
        while(not get == "yes"):
            get = input("输入yes开始\n")

        #30道口算练习
        for i in range(30):
            print("第"+str(i+1)+"道口算练习")
            self.symbolgeneration()
            self.numbergeneration()
            self.checking()
        final = int(self.score+0.5)
        print("你的最终分数是"+str(final))
        if self.score >= 90:
            print("非常不错，你是数学天才小高斯")
        elif self.score >=80:
            print("很好，你很有数学天赋，还可以再加把劲")
        elif self.score >= 70:
            print("多多努力你也会变得更强")
        else:
            print("看来要好好修炼计算能力了啊")
        return None

    #接口创造，使得界面设计者可以使用我的类中的函数作为借口
    def get_ans(self):
        if not self.pro_har == 3:
            if self.symbol == 1:
                return self.num1+self.num2
            else:
                return self.num1-self.num2
        else:
            return 10-self.num1

    #接口创造，使得界面设计者可以使用我的接口
    def get_str(self):
        result = []
        if not self.pro_har == 3:
            result.append(str(self.num1))
            if self.symbol == 1:
                result.append("+")
            else:
                result.append("-")
            result.append(str(self.num2))
            return  ''.join(result)+"="
        else:
            return "( )+"+str(self.num1)+"=10 ()="

    # 保持接口一致
    def calculationgeneration(self):
        self.symbolgeneration()
        self.numbergeneration()

    #为了给不同的题型增加干扰项，加入了这个函数
    def createnumerals(self):
        self.calculationgeneration()
        ans = self.get_ans()
        if self.type == 2: #选择题
            l = [ans-1,ans,ans+1,ans+2]
            random.shuffle(l)
            if ans == l[0]:
                xuanl = "A"
            elif ans == l[1]:
                xuanl = "B"
            elif ans == l[2]:
                xuanl = "C"
            else:
                xuanl = "D"
            return l, ans, xuanl
        elif self.type == 3: #判断题
            k = random.randint(1,2)
            if k == 1:
                exc = ans
                xuanl = True
            else:
                exc = random.randint(1,99)
                while exc == ans:
                    exc = random.randint(1,99)
                xuanl = False
            return exc, ans, xuanl
        else: #简单填空题
            return None, ans, None

    #保持接口一致
    def get_shuffle(self):
        (atk,ans,xuanl) = self.createnumerals()
        strin = self.get_str()
        return strin, ans, atk, xuanl




        
if __name__ == "__main__":
    print("欢迎使用家长帮出题系统，本系统提提供小学算术题的出题并改错。家长帮努力加载中")
    grade = input("请选择目前的年级:(输入1为一年级,2为二年级,3为三年级,4为四年级)\n") 
    #这边的想法是图形界面直接点击选择
    while(not(grade == "1" or grade == "2" or grade == "3")):
        print("输入不正确哦，再试一次吧")
        grade = input("请选择目前的年级:(输入1为一年级,2为二年级,3为三年级,4为四年级)\n") 
    if grade=="1":
        pro_hard = input("选择题目的难度：1代表简单，2代表中等，3代表困难:\n")
        pro_type = int(input("选择题目类型:1为填空，2为选择，3为判断：\n"))
        if pro_hard == "1":
            gradeone = Gradeone(1,pro_type)
            print(gradeone.get_shuffle())
        elif pro_hard == "2":
            gradeone = Gradeone(2,pro_type)
            print(gradeone.get_shuffle())
        else:
            gradeone = Gradeone(3,pro_type)
            print(gradeone.get_shuffle())
